package com.zhixi.pattern.notimportant.commandpattern;

import com.zhixi.pattern.notimportant.commandpattern.operation.AddRequirementCommand;
import com.zhixi.pattern.notimportant.commandpattern.operation.DeletePageCommand;
import com.zhixi.pattern.notimportant.commandpattern.operation.Invoker;

/**
 * 命令模式
 *
 *  类之间解耦
 *  调用者角色与接收者角色之间没有任何依赖关系，调用者实现功能时只需要调用Command抽象的execute方法就可以，不需要了解到底是哪个接收者执行
 *
 *  优点：类之间解耦、扩展性，可以结合责任链模式
 *
 *  缺点：类膨胀，业务逻辑变复杂
 *
 * @作者 ShuHaoNan
 * @邮箱 shuhaonan1@gmail.com
 * @时间 2020/11/17 10:24
 */
public class CommandPattern {

    public static void main(String[] args) {
        Invoker invoker = new Invoker();
        /* 甲方爸爸：项目经理滚过来，我要删除一个页面 */
        invoker.setCommand(new DeletePageCommand());
        invoker.action();
        /* 甲方爸爸：项目经理滚过来，我要新增一个需求 */
        invoker.setCommand(new AddRequirementCommand());;
        invoker.action();
        /* 甲方爸爸：项目经……  。  项目经理：滚犊子 */
    }

}
